﻿#region << 版 本 注 释 >>

/*----------------------------------------------------------------
* 类 名 称 ：StateMachineBase
* 类 描 述 ：
* 作    者 ：henrychang
* 创建时间 ：2019/1/27 23:59:10
*******************************************************************
* Copyright @ henrychang 2019. All rights reserved.
*******************************************************************
//----------------------------------------------------------------*/

#endregion << 版 本 注 释 >>

using System;

namespace TouchFish.StateMachine
{
    /// <summary>
    /// 状态机基类
    /// </summary>
    public abstract class StateMachineBase
    {
        private readonly string _name;

        /// <summary>
        /// 初始化状态机基类的新实例
        /// </summary>
        public StateMachineBase()
            : this(null)
        {
        }

        /// <summary>
        /// 初始化状态机基类的新实例
        /// </summary>
        /// <param name="name">状态机名称</param>
        public StateMachineBase(string name)
        {
            _name = name ?? string.Empty;
        }

        /// <summary>
        /// 获取状态机名称
        /// </summary>
        public string Name
        {
            get
            {
                return _name;
            }
        }

        /// <summary>
        /// 获取状态机持有者类型
        /// </summary>
        public abstract Type OwnerType
        {
            get;
        }

        /// <summary>
        /// 获取状态机中状态的数量
        /// </summary>
        public abstract int StateCount
        {
            get;
        }

        /// <summary>
        /// 获取状态机是否正在运行
        /// </summary>
        public abstract bool IsRunning
        {
            get;
        }

        /// <summary>
        /// 获取状态机是否被销毁
        /// </summary>
        public abstract bool IsDestroyed
        {
            get;
        }

        /// <summary>
        /// 获取当前状态机状态名称
        /// </summary>
        public abstract string CurrentStateName
        {
            get;
        }

        /// <summary>
        /// 状态机轮询
        /// </summary>
        internal abstract void Update();

        /// <summary>
        /// 关闭并清理状态机
        /// </summary>
        internal abstract void Shutdown();
    }
}